import logging

from users.models import User
from meiduo.utils.utils import generate_access_token, check_access_token

# 创建Logger日志对象
logger = logging.getLogger("django")


def auth_user(username, password):
    """
    用户验证
    :param username: 用户账号
    :param password: 用户密码
    :return: 验证成功返回用户对象，验证失败返回None
    """
    try:
        user = User.objects.get(username=username)  # 根据用户名获取用户对象
    except Exception as e:  # 根据用户名获取用户对象失败
        try:
            logger.error(e)
            user = User.objects.get(mobile=username)  # 根据用户手机号获取用户对象
        except Exception as e:  # 根据用户手机号获取用户对象失败
            logger.error(e)
            return None
    # user_password = user.password  # 通过用户对象获取用户密码
    # if password != user_password:  # 验证用户密码
    if not user.check_password(password):
        return None
    return user


def generate_verify_email_token(username, email):
    """
    生成邮箱验证Access Token
    :param username: 用户名
    :param email: 用户邮箱
    :return: 邮箱验证链接
    """
    data = {'username': username, 'email': email}  # 设置身份识别参数
    token = generate_access_token(str(data))  # 加密身份识别参数
    return token  # 返回邮箱验证链接


def check_verify_email_token(token):
    """
    解密邮箱验证Access Token
    :param token: Access Token
    :return: 解密成功以元组形式返回用户名及用户邮箱，解密失败返回None
    """
    try:
        data = eval(check_access_token(token))  # 解密Access Token还原数据
    except Exception as e:
        logger.error(e)
        return None
    if isinstance(data, dict):
        username = data.get("username")  # 获取用户名
        email = data.get("email")  # 获取用户邮箱
        if all([username, email]):
            return username, email
    return None
